package designMode.singletonPattern;

//双重检查锁定（线程安全，推荐）
public class Singleton02 {
    private static volatile Singleton02 instance;
    //双重检查锁定通过缩小加锁范围，仅在必要时同步代码块，既保证线程安全，又提升性能。
    //volatile 关键字是实现双重检查锁定的关键，防止指令重排序导致未初始化对象被访问。
    private Singleton02() {}

    public static Singleton02 getInstance() {
        if (instance == null) {
            synchronized (Singleton02.class) {
                if (instance == null) {
                    instance = new Singleton02();
                }
            }
        }
        return instance;
    }
}
